package br.com.sgmf.web.managedbean;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.model.Modelo;
import br.com.sgmf.model.Parte;
import br.com.sgmf.model.Peca;
import br.com.sgmf.service.ModeloService;
import br.com.sgmf.service.ParteService;
import br.com.sgmf.service.PecaService;

@Component
@ManagedBean
@RequestScoped
public class PecaBean {

	private static final String PECA_SALVA_COM_SUCESSO = "Peça salva com sucesso!";
	private static final String PECA_EXCLUIDA_COM_SUCESSO = "Peça excluída com sucesso!";
	private static final String ERRO_AO_SALVAR_PECA = "Erro ao salvar Peça";
	private static final String ERRO_AO_EXCLUIR_PECA = "Erro ao excluir Peça";

	private Peca peca;

	private List<Peca> pecas;
	private List<Parte> partes;
	private List<Modelo> modelos;

	@Autowired
	private PecaService pecaService;

	@Autowired
	private ParteService parteService;

	@Autowired
	private ModeloService modeloService;

	@PostConstruct
	public void inicializar() {
		peca = new Peca();
		pecas = pecaService.findAll();
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			pecaService.saveOrUpdate(peca);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					PECA_SALVA_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					ERRO_AO_SALVAR_PECA, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public void novo() {
		peca = new Peca();
	}

	public String editar(Peca peca) {
		this.peca = peca;
		return null;
	}

	public String excluir(Peca peca) {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			pecaService.delete(peca);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					PECA_EXCLUIDA_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					ERRO_AO_EXCLUIR_PECA, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public Peca getPeca() {
		return peca;
	}

	public void setPeca(Peca peca) {
		this.peca = peca;
	}

	public List<Peca> getPecas() {
		return pecas;
	}

	public void setPecas(List<Peca> pecas) {
		this.pecas = pecas;
	}

	public List<Parte> getPartes() {
		return partes;
	}

	public void setPartes(List<Parte> partes) {
		this.partes = partes;
	}

	public List<Modelo> getModelos() {
		return modelos;
	}

	public void setModelos(List<Modelo> modelos) {
		this.modelos = modelos;
	}

	public PecaService getPecaService() {
		return pecaService;
	}

	public void setPecaService(PecaService pecaService) {
		this.pecaService = pecaService;
	}

	public ParteService getParteService() {
		return parteService;
	}

	public void setParteService(ParteService parteService) {
		this.parteService = parteService;
	}

	public ModeloService getModeloService() {
		return modeloService;
	}

	public void setModeloService(ModeloService modeloService) {
		this.modeloService = modeloService;
	}

}
